// 枚举类型
enum Color {Red, Green, Blue};

let color: Color = Color.Blue;
console.log(color);    // 输出 2

// 返回数值类型的函数
function sum():number {
    return 4;
}

// void用于方法的修饰，表示该方法没有返回类型
function soSum():void {
    console.log("哈哈哈");
}

// null
let x2:null = null;

// 报错
// x2 = 1;

// undefined
let x3:undefined;
// 报错
// x3 = 1;


let x4:string = "1";
// 正确：undefined的值，可以赋值给任意数据类型的变量
// 如果是严格模式（--strictNullChecks）：报错
x4 = undefined;
// 正确：null的值，可以赋值给任意数据类型的变量
// 如果是严格模式（--strictNullChecks）：报错
x4 = null;

// never: 永远无法赋值
// never是其他类型子类型，只能被never赋值，不能赋值其他数据类型
let x5:never;
// 以下都报错
// x5 = 1;
// x5 = null;
// x5 = undefined;

// 正确
// x = (() => {throw new Error("我错了")})();

function throwError():never {
    throw new Error("我又错了！");
}

let y1:number;
// never类型是其他数据类型的子类型，所以never类型可以赋值给任意数据类
// 正确：never类型可以赋值给number类型
y1 = throwError();